package KnowSparkSQL.DSL.DatasetMethods.CreateDataset;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.Metadata;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

import java.util.Arrays;
import java.util.List;

public class CreateDataset4 {
    public static void main(String[] args) {
        /**
         * 调用sparkSession.createDataFrame(List<Row> rows, StructType schema)
         * 创建DataSet<Row>对象
         */

        SparkSession ss = SparkSession.builder().appName("CreateDataset4").master("local").getOrCreate();

        // 创建row对象 create 第一个参数： 第一列 第二个参数： 第二列
        Row row = RowFactory.create("张三", 8);
        Row row2 = RowFactory.create("name2", 9);

        // StructField第一个参数 列名称 第二个参数 指定数据类型 第三个参数 是否为空 第四个参数 metadata
        StructField field = new StructField("name", DataTypes.StringType, true, Metadata.empty());
        StructField field1 = new StructField("age", DataTypes.IntegerType, true, Metadata.empty());
        //  创建StructField数组
        List<StructField> fields = Arrays.asList(field,field1);


        // 将StructField数组转成StructType对象
        StructType structType = DataTypes.createStructType(fields);

        Dataset<Row> dataFrame = ss.createDataFrame(Arrays.asList(row, row2), structType);

        // 显示dataframe数据
        dataFrame.show();

        // 打印schema
        dataFrame.printSchema();




    }
}
